package co.edu.usbcali.ai.ga.bl;

import java.util.List;

import co.edu.usbcali.ai.ga.Ga;
import co.edu.usbcali.ai.ga.ICromosom;
import co.edu.usbcali.ai.ga.Individual;


public interface ICrosser {
	public static final int UNIFORM_SINGLE_CUT=0;	
	public static final int VARIABLE_MULTIPLE_CUT=1;

	public static final int NO_SIZE=0;

	/**
	 * Metodo que cruza los cromosomas father y mother y devuelve una lista de hijos. El tipo de cruce es
	 * definido por la variable cutType en la clase que implementa la interfaz.
	 * @param father
	 * @param mother
	 * @return Lista de hijos (2)
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public List<ICromosom> cross(ICromosom father,ICromosom mother,Class<? extends ICromosom> cromosomImplementation) throws InstantiationException, IllegalAccessException;
	public List<Individual> cross(List<Individual> list,int children,int generationNumber,Class<? extends ICromosom> cromosomImplementation,Ga ga) throws InstantiationException, IllegalAccessException;
// TODO Implementar este metodo puede ser util
//	public List<Individual> cross(Individual father,Individual mother,Class<? extends Cromosom> cromosomImplementation) throws InstantiationException, IllegalAccessException;
}
